//
//  CZUserAccountViewModel.swift
//  weibo
//
//  Created by Apple on 16/3/11.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit

class CZUserAccountViewModel: NSObject {

    //  因为用户只有一个实例，我们也可以提供一个单例的用户的viewmodel
    static let sharedAccount = CZUserAccountViewModel()
    
    //  持有一个model
    var userAccount: CZUserAccount?
    
    //  构造函数私有化
    private override init() {
        super.init()
        //  取出上一次保存的归档数据
        self.userAccount = loadUserAccount()
        
    }
    //  判断是否登录
    var userLogin: Bool {
        return accessToken != nil
    }
    
    //  判断accesstoken是否存在
    var accessToken: String? {
        //  如果accesstoken为nil，则直接返回nil
        guard let token = userAccount?.access_token else {
            return nil
        }
        //   判断accesstoken的过期时间是否大于当前时间
        guard let expiresDate = userAccount?.expiresDate else {
            return nil
        }
        //  升序 模式，比较当前时间不大于过期时间 ,  返回正确的token
        if NSDate().compare(expiresDate) == NSComparisonResult.OrderedAscending {
            return token
        }
        // 否则返回nil
        return nil
    }
        
    
}

//  用户获取accesstoken和个人信息接口
extension CZUserAccountViewModel {
    // MARK:    请求accesstoken
    func requestAccesstoken(code: String, complete:(isSuccess: Bool)->()) {
        
        //  网络请求封装到了networktools
        CZNetWorkTools.netWorkTools.requestAccesstoken(code) { (response, error) -> () in
            if error != nil {
                complete(isSuccess: false)
                return
            }
            
            guard let responseDic = response as? [String: AnyObject] else {
                print("不是一个字典")
                return
            }
            
            let userAccount = CZUserAccount(dic: responseDic)
            
            //  给持有的model属性赋值
            self.userAccount = userAccount
            
            self.loadUserInfo(userAccount, complete: complete)

        }
        
        //  代码以抽取到CZNetWorkTools
        
//        
//        let url = "https://api.weibo.com/oauth2/access_token"
//        let params = [
//            "client_id": Appkey,
//            "client_secret": AppSecret,
//            "grant_type": "authorization_code",
//            "code": code,
//            "redirect_uri": Redirect_uri
//        ]
//        //  获取accesstoken
//        CZNetWorkTools.netWorkTools.requestOperation(.POST, url: url, params: params) { (response, error) -> () in
//            if error != nil {
//                complete(isSuccess: false)
//                return
//            }
//            
//            guard let responseDic = response as? [String: AnyObject] else {
//                print("不是一个字典")
//                return
//            }
//            
//            let userAccount = CZUserAccount(dic: responseDic)
//
//            //  给持有的model属性赋值
//            self.userAccount = userAccount
//            
//            self.loadUserInfo(userAccount, complete: complete)
//            
//        }
        
    }
    
    //  获取用户数据
    private func loadUserInfo(userAccount: CZUserAccount, complete:(isSuccess: Bool)->()) {
        
        
        
        CZNetWorkTools.netWorkTools.loadUserInfo(userAccount) { (response, error) -> () in
            if error != nil {
    
                print(error)
                complete(isSuccess: false)
                return
            }

            //  得到数据进行，增加userAccount属性
            print(response)
            guard let responseDic = response as? [String: AnyObject] else {
                //  不是一个正确的json
                return
            }
            //  获取个人数据后，设置持有model的属性
            //  头像
            self.userAccount?.avatar_large = responseDic["avatar_large"] as? String
            //  昵称
            self.userAccount?.screen_name = responseDic["screen_name"] as? String
            
            print(userAccount)
            //  保存用户数据
            //userAccount.saveUserInfo()
            self.saveUserInfo(self.userAccount!)
            complete(isSuccess: true)
        }
        
        //  代码以抽取到CZNetWorkTools
        
//        let url = "https://api.weibo.com/2/users/show.json"
//        let params = [
//            "access_token": userAccount.access_token!,
//            "uid": userAccount.uid,
//        ]
//        CZNetWorkTools.netWorkTools.requestOperation(.GET, url: url, params: params) { (response, error) -> () in
//            
//            if error != nil {
//
//                print(error)
//                complete(isSuccess: false)
//                return
//            }
//            
//            //  得到数据进行，增加userAccount属性
//            print(response)
//            guard let responseDic = response as? [String: AnyObject] else {
//                //  不是一个正确的json
//                return
//            }
//            //  获取个人数据后，设置持有model的属性
//            //  头像
//            self.userAccount?.avatar_large = responseDic["avatar_large"] as? String
//            //  昵称
//            self.userAccount?.screen_name = responseDic["screen_name"] as? String
//            
//            print(userAccount)
//            //  保存用户数据
//            //userAccount.saveUserInfo()
//            self.saveUserInfo(self.userAccount!)
//            complete(isSuccess: true)
//            
//        }
//        
    }
}

//  归档和解档
extension CZUserAccountViewModel {
    //  保存到沙盒目录里面
    func saveUserInfo(userAccount: CZUserAccount) {
        
        let path = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
        
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: path)
        
    }
    
    //  读取沙盒目录返回实例
    func loadUserAccount() -> CZUserAccount? {
        let path = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
        return NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? CZUserAccount
        
    }

}
